#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:taotieren


"""
    rpi.gpio 需要 root 权限，板上运行需要使用
    sudo python switch_2_pos.py
    控制旋转编码器
    当旋转编码器顺时针旋转时，测试程序会递增，每次 +1；
    当旋转编码器逆时针旋转时，测试程序会递减，每次 -1；
    没有转动时，返回 0。
    使用全局变量 old_a, old_b 保存开关 A 和 B 的前一次状态，
    再与之后的新状态进行比较，就可以判断转向了。
"""

""" 非树莓派环境下可以用 rpi.gpio_def 代替 rpi.gpio 来进行程序调试和验证 """
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)

input_A = 18
input_B = 23

GPIO.setup(input_A, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(input_B, GPIO.IN, pull_up_down=GPIO.PUD_UP)

old_a = True
old_b = True


def get_encoder_turn():
    # return -1, 0, or +1
    global old_a, old_b
    result = 0
    new_a = GPIO.input(input_A)
    new_b = GPIO.input(input_B)
    if new_a != old_a or new_b != old_b:
        if old_a == 0 and new_a == 1:
            result = (old_b * 2 - 1)
        elif old_b == 0 and new_b == 1:
            result = -(old_a * 2 - 1)
    old_a, old_b = new_a, new_b
    time.sleep(0.001)
    return result


x = 0

while True:
    change = get_encoder_turn()
    if change != 0:
        x = x + change
        print(x)
